<?php

	/**
	   *根据栏目的ID生成网址格式
	   *@date 2011-3-26
	   *@time 下午02:48:33
	   */
	function auto_url($cid) {
		//根据栏目的ID生成网址格式
		$url='';
		switch (TRUE) {
			case $cid=='15':
				$url='down';
			break;
			case $cid=='1':
				$url='page';
			break;
			case $cid=='12':
				$url='page';
			break;
			case $cid=='13':
				$url='page';
			break;
			case $cid=='14':
				$url='page';
			break;
			case $cid=='17':
				$url='page';
			break;
			default:
				$url='detail';
			break;
		}
		return $url;
	}//end auto_url
	/**
     +----------------------------------------------------------
	 * 根据字符串生成唯一码
	 * 传入字符串 返回唯一码
	 * @date 2011-3-5 - @time 下午06:19:12
     +----------------------------------------------------------
	 * @static
	 * @access public
     +----------------------------------------------------------
	 * @param string $input
     +----------------------------------------------------------
	 * @return void
     +----------------------------------------------------------
	 */
	function shorturl($input) {
		$base32 = array ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5' );
		
		$hex = md5 ( $input );
		//echo "md5:".$hex.'<br>';
		$hexLen = strlen ( $hex );
		$subHexLen = $hexLen / 8;
		$output = array ();
		
		for($i = 0; $i < $subHexLen; $i ++) {
			$subHex = substr ( $hex, $i * 8, 8 );
			//echo $i."substr: ".$subHex.'<br>';
			$int = 0x3FFFFFFF & (1 * ('0x' . $subHex));
			//echo $i."0x3FFFFFFF: ".$int.'<br>';
			$out = '';
			
			for($j = 0; $j < 6; $j ++) {
				$val = 0x0000001F & $int;
				//echo $i.$j."0x0000001F: ".$val.'<br>';
				$out .= $base32 [$val];
				
				$int = $int >> 5;
			}
			
			$output [] = $out;
		}
		return $output ['0'];
	}
	
/**
 *将支付串转成网址适应格式
 *@date 2011-1-13 / @time 下午05:45:02
 */
function str_to_url($str, $str2 = '') {
	//将支付串转成网址适应格式
	$str = Pinyin ( $str, 1 );
	$str = substr ( strtolower ( str_replace ( ' ', '-', str_replace ( '  ', ' ', trim ( preg_replace ( "/[^_a-zA-Z0-9-]/", " ", $str ), " -" ) ) ) ), 0, 100 );
	if ($str2 != '') {
		$str = substr ( $str, 0, 90 ) . $str2;
	}
	return $str;
} //end str_to_url


//将汉字专为拼音start
function Pinyin($_String, $_Code = 'gb2312') {
	$_DataKey = "a|ai|an|ang|ao|ba|bai|ban|bang|bao|bei|ben|beng|bi|bian|biao|bie|bin|bing|bo|bu|ca|cai|can|cang|cao|ce|ceng|cha" . "|chai|chan|chang|chao|che|chen|cheng|chi|chong|chou|chu|chuai|chuan|chuang|chui|chun|chuo|ci|cong|cou|cu|" . "cuan|cui|cun|cuo|da|dai|dan|dang|dao|de|deng|di|dian|diao|die|ding|diu|dong|dou|du|duan|dui|dun|duo|e|en|er" . "|fa|fan|fang|fei|fen|feng|fo|fou|fu|ga|gai|gan|gang|gao|ge|gei|gen|geng|gong|gou|gu|gua|guai|guan|guang|gui" . "|gun|guo|ha|hai|han|hang|hao|he|hei|hen|heng|hong|hou|hu|hua|huai|huan|huang|hui|hun|huo|ji|jia|jian|jiang" . "|jiao|jie|jin|jing|jiong|jiu|ju|juan|jue|jun|ka|kai|kan|kang|kao|ke|ken|keng|kong|kou|ku|kua|kuai|kuan|kuang" . "|kui|kun|kuo|la|lai|lan|lang|lao|le|lei|leng|li|lia|lian|liang|liao|lie|lin|ling|liu|long|lou|lu|lv|luan|lue" . "|lun|luo|ma|mai|man|mang|mao|me|mei|men|meng|mi|mian|miao|mie|min|ming|miu|mo|mou|mu|na|nai|nan|nang|nao|ne" . "|nei|nen|neng|ni|nian|niang|niao|nie|nin|ning|niu|nong|nu|nv|nuan|nue|nuo|o|ou|pa|pai|pan|pang|pao|pei|pen" . "|peng|pi|pian|piao|pie|pin|ping|po|pu|qi|qia|qian|qiang|qiao|qie|qin|qing|qiong|qiu|qu|quan|que|qun|ran|rang" . "|rao|re|ren|reng|ri|rong|rou|ru|ruan|rui|run|ruo|sa|sai|san|sang|sao|se|sen|seng|sha|shai|shan|shang|shao|" . "she|shen|sheng|shi|shou|shu|shua|shuai|shuan|shuang|shui|shun|shuo|si|song|sou|su|suan|sui|sun|suo|ta|tai|" . "tan|tang|tao|te|teng|ti|tian|tiao|tie|ting|tong|tou|tu|tuan|tui|tun|tuo|wa|wai|wan|wang|wei|wen|weng|wo|wu" . "|xi|xia|xian|xiang|xiao|xie|xin|xing|xiong|xiu|xu|xuan|xue|xun|ya|yan|yang|yao|ye|yi|yin|ying|yo|yong|you" . "|yu|yuan|yue|yun|za|zai|zan|zang|zao|ze|zei|zen|zeng|zha|zhai|zhan|zhang|zhao|zhe|zhen|zheng|zhi|zhong|" . "zhou|zhu|zhua|zhuai|zhuan|zhuang|zhui|zhun|zhuo|zi|zong|zou|zu|zuan|zui|zun|zuo";
	
	$_DataValue = "-20319|-20317|-20304|-20295|-20292|-20283|-20265|-20257|-20242|-20230|-20051|-20036|-20032|-20026|-20002|-19990" . "|-19986|-19982|-19976|-19805|-19784|-19775|-19774|-19763|-19756|-19751|-19746|-19741|-19739|-19728|-19725" . "|-19715|-19540|-19531|-19525|-19515|-19500|-19484|-19479|-19467|-19289|-19288|-19281|-19275|-19270|-19263" . "|-19261|-19249|-19243|-19242|-19238|-19235|-19227|-19224|-19218|-19212|-19038|-19023|-19018|-19006|-19003" . "|-18996|-18977|-18961|-18952|-18783|-18774|-18773|-18763|-18756|-18741|-18735|-18731|-18722|-18710|-18697" . "|-18696|-18526|-18518|-18501|-18490|-18478|-18463|-18448|-18447|-18446|-18239|-18237|-18231|-18220|-18211" . "|-18201|-18184|-18183|-18181|-18012|-17997|-17988|-17970|-17964|-17961|-17950|-17947|-17931|-17928|-17922" . "|-17759|-17752|-17733|-17730|-17721|-17703|-17701|-17697|-17692|-17683|-17676|-17496|-17487|-17482|-17468" . "|-17454|-17433|-17427|-17417|-17202|-17185|-16983|-16970|-16942|-16915|-16733|-16708|-16706|-16689|-16664" . "|-16657|-16647|-16474|-16470|-16465|-16459|-16452|-16448|-16433|-16429|-16427|-16423|-16419|-16412|-16407" . "|-16403|-16401|-16393|-16220|-16216|-16212|-16205|-16202|-16187|-16180|-16171|-16169|-16158|-16155|-15959" . "|-15958|-15944|-15933|-15920|-15915|-15903|-15889|-15878|-15707|-15701|-15681|-15667|-15661|-15659|-15652" . "|-15640|-15631|-15625|-15454|-15448|-15436|-15435|-15419|-15416|-15408|-15394|-15385|-15377|-15375|-15369" . "|-15363|-15362|-15183|-15180|-15165|-15158|-15153|-15150|-15149|-15144|-15143|-15141|-15140|-15139|-15128" . "|-15121|-15119|-15117|-15110|-15109|-14941|-14937|-14933|-14930|-14929|-14928|-14926|-14922|-14921|-14914" . "|-14908|-14902|-14894|-14889|-14882|-14873|-14871|-14857|-14678|-14674|-14670|-14668|-14663|-14654|-14645" . "|-14630|-14594|-14429|-14407|-14399|-14384|-14379|-14368|-14355|-14353|-14345|-14170|-14159|-14151|-14149" . "|-14145|-14140|-14137|-14135|-14125|-14123|-14122|-14112|-14109|-14099|-14097|-14094|-14092|-14090|-14087" . "|-14083|-13917|-13914|-13910|-13907|-13906|-13905|-13896|-13894|-13878|-13870|-13859|-13847|-13831|-13658" . "|-13611|-13601|-13406|-13404|-13400|-13398|-13395|-13391|-13387|-13383|-13367|-13359|-13356|-13343|-13340" . "|-13329|-13326|-13318|-13147|-13138|-13120|-13107|-13096|-13095|-13091|-13076|-13068|-13063|-13060|-12888" . "|-12875|-12871|-12860|-12858|-12852|-12849|-12838|-12831|-12829|-12812|-12802|-12607|-12597|-12594|-12585" . "|-12556|-12359|-12346|-12320|-12300|-12120|-12099|-12089|-12074|-12067|-12058|-12039|-11867|-11861|-11847" . "|-11831|-11798|-11781|-11604|-11589|-11536|-11358|-11340|-11339|-11324|-11303|-11097|-11077|-11067|-11055" . "|-11052|-11045|-11041|-11038|-11024|-11020|-11019|-11018|-11014|-10838|-10832|-10815|-10800|-10790|-10780" . "|-10764|-10587|-10544|-10533|-10519|-10331|-10329|-10328|-10322|-10315|-10309|-10307|-10296|-10281|-10274" . "|-10270|-10262|-10260|-10256|-10254";
	$_TDataKey = explode ( '|', $_DataKey );
	$_TDataValue = explode ( '|', $_DataValue );
	
	$_Data = (PHP_VERSION >= '5.0') ? array_combine ( $_TDataKey, $_TDataValue ) : _Array_Combine ( $_TDataKey, $_TDataValue );
	arsort ( $_Data );
	reset ( $_Data );
	
	if ($_Code != 'gb2312')
		$_String = _U2_Utf8_Gb ( $_String );
	$_Res = '';
	for($i = 0; $i < strlen ( $_String ); $i ++) {
		$_P = ord ( substr ( $_String, $i, 1 ) );
		
		if ($_P > 160) {
			$_Q = ord ( substr ( $_String, ++ $i, 1 ) );
			$_P = $_P * 256 + $_Q - 65536;
		}
		$_Res .= _Pinyin ( $_P, $_Data );
	}
	return $_Res; //preg_replace ( "/[^a-zA-Z0-9]*/", '', $_Res );
}

function _Pinyin($_Num, $_Data) {
	if ($_Num > 0 && $_Num < 160)
		return chr ( $_Num );
	elseif ($_Num < - 20319 || $_Num > - 10247)
		return '';
	else {
		foreach ( $_Data as $k => $v ) {
			if ($v <= $_Num)
				break;
		}
		return $k . '-';
	}
}

function _U2_Utf8_Gb($_C) {
	/*$_String = '';
	if ($_C < 0x80)
		$_String .= $_C;
	elseif ($_C < 0x800) {
		$_String .= chr ( 0xC0 | $_C >> 6 );
		$_String .= chr ( 0x80 | $_C & 0x3F );
	} elseif ($_C < 0x10000) {
		$_String .= chr ( 0xE0 | $_C >> 12 );
		$_String .= chr ( 0x80 | $_C >> 6 & 0x3F );
		$_String .= chr ( 0x80 | $_C & 0x3F );
	} elseif ($_C < 0x200000) {
		$_String .= chr ( 0xF0 | $_C >> 18 );
		$_String .= chr ( 0x80 | $_C >> 12 & 0x3F );
		$_String .= chr ( 0x80 | $_C >> 6 & 0x3F );
		$_String .= chr ( 0x80 | $_C & 0x3F );
	}*/
	return iconv ( 'UTF-8', 'GB2312//IGNORE', $_C );
}

function _Array_Combine($_Arr1, $_Arr2) {
	for($i = 0; $i < count ( $_Arr1 ); $i ++)
		$_Res [$_Arr1 [$i]] = $_Arr2 [$i];
	return $_Res;
}
//将汉字专为拼音end


/**
 *获取数组的前几个
 *@date 2010-10-20
 *@time 下午02:59:29
 */
function rand_arr($arr, $num, $split = ',') {
	//获取数组的前几个
	$str = '';
	if (! is_array ( $arr )) { //传入数组
		$arr = trim ( $str, $split );
		$arr = trim ( $str );
		$arr = explode ( $split, $arr );
	}
	shuffle ( $arr );
	$num = count ( $arr ) >= $num ? $num : count ( $arr );
	for($i = 0; $i <= $num; $i ++) {
		$str .= $arr [$i] . $split;
	}
	return trim ( $str, $split );
} //end function_name

/**
 *编码需要打开的网址
 *@date 2010-9-8
 *@time 下午06:06:25
 */
function jump($url, $id) {
	//编码需要打开的网址
	$url = $url . '||' . $id;
	$url = myencode ( $url );
	return __APP__ . '/link/' . $url;
} //end function_name

function br2nl($text) {
	return preg_replace ( '/<br\\s*?\/??>/i', '', $text );
}

/**
 * 给数组的匹配项加上checked
 *
 * @param  $arr 待核对值
 * @param  $value 匹配值
 * @param	$type 输出字符
 * @return  string
 */
function arrayischk($arr, $value = '-100',$type = 'checked') {
	$re = '';
	if ($value == '-100') {
		$re = empty ( $arr ) ? '' : $type == 'checked' || $type == 'selected' ? " $type=$type" : "$type";
	} else {
		$re = ($arr == $value) ? $type == 'checked' || $type == 'selected' ? " $type=$type" : "$type" : '';
	}
	return $re;
}

/**
 * 将数组用指定字符连接
 *
 * @param  $array 数组
 * @param  $split 分隔符
 * @return  string
 */
function array2string($array, $split = ',') {
	if (is_array ( $array )) {
		$dot = '';
		foreach ( $array as $data ) {
			$string .= $dot . $data;
			$dot = $split;
		}
		return empty ( $string ) ? '' : $string;
	} else {
		return $array;
	}
}

/**
 * 将指定数据转换成数组再对比，符合条件则返回checked
 *
 * @param  $sring 输入字符
 * @param  $param 条件
 * @param  $split 分隔符
 * @return  string
 */
function string2checked($sring, $param, $split = ',', $type = 'checked') {
	$splitParam = explode ( $split, $param );
	if (in_array ( $sring, $splitParam ))
		$result = $type == 'checked' || $type == 'selected' ? " $type=$type" : "$type";
	return $result;
}

/**
 *
 * 下拉框，单选按钮 自动选择
 * @param  $string 输入字符
 * @param  $param 条件
 * @param  $type 类型  selected checked
 * @return   string
 */
function selected($string, $param = 1, $type = 'select') {
	if ($string == $param) {
		$returnString = $type == 'select' ? 'selected="selected"' : 'checked="checked"';
	}
	return $returnString;
}




/**
 *获取指定表中的数据
 *@date 2010-6-7
 *@time 下午09:42:30
 */
function get_field($gid, $field = 'groupname', $table = "Group") {
	//获取群组名称
	$dao = M ( $table );
	$condition = array ();
	$condition ['id'] = $gid;
	$info = $dao->where ( $condition )->field ( $field )->find ();
	if ($field != '*' && ! empty ( $field )) {
		$info = $info [$field];
	}
	return $info;
} //end get_info




function getkey($arr, $k) {
	$narr = array ();
	foreach ( $arr as $v ) {
		$narr [$k] = $v;
	}
	return $narr;
}

/**
 *格式时间
 *@date 2010-5-20
 *@time 下午08:35:01
 */
function toDate($time, $format = 'Y-m-d H:i:s') {
	if (empty ( $time )) {
		return '';
	}
	$format = str_replace ( '#', ':', $format );
	return date ( auto_charset ( $format ), $time );
}


function get_uid() {
	return empty ( $_SESSION ['uid'] ) ? '0' : $_SESSION ['uid'];
} // END get_uid




function SubDay($ntime, $ctime) {
	$dayst = 3600 * 24;
	$cday = ceil ( ($ntime - $ctime) / $dayst );
	return $cday;
}

function AddDay($ntime, $aday) {
	$dayst = 3600 * 24;
	$oktime = $ntime + ($aday * $dayst);
	return $oktime;
}

function GetDateTimeMk($mktime) {
	return MyDate ( 'Y-m-d H:i:s', $mktime );
}

function GetDateMk($mktime) {
	return MyDate ( "Y-m-d", $mktime );
}


function ru($url, $p = array(), $h = true, $r = false) {
	return U ( $url, $p, $r, $h );
}
function IP($ip = '', $file = 'UTFWry.dat') {
	$_ip = array ();
	if (isset ( $_ip [$ip] )) {
		return $_ip [$ip];
	} else {
		import ( "ORG.Net.IpLocation" );
		$iplocation = new IpLocation ( $file );
		$location = $iplocation->getlocation ( $ip );
		$_ip [$ip] = $location ['country'] . $location ['area'];
	}
	return $_ip [$ip];
}

// 获取客户端IP地址
function client_ip() {
	if (getenv ( "HTTP_CLIENT_IP" ) && strcasecmp ( getenv ( "HTTP_CLIENT_IP" ), "unknown" ))
		$ip = getenv ( "HTTP_CLIENT_IP" );
	else if (getenv ( "HTTP_X_FORWARDED_FOR" ) && strcasecmp ( getenv ( "HTTP_X_FORWARDED_FOR" ), "unknown" ))
		$ip = getenv ( "HTTP_X_FORWARDED_FOR" );
	else if (getenv ( "REMOTE_ADDR" ) && strcasecmp ( getenv ( "REMOTE_ADDR" ), "unknown" ))
		$ip = getenv ( "REMOTE_ADDR" );
	else if (isset ( $_SERVER ['REMOTE_ADDR'] ) && $_SERVER ['REMOTE_ADDR'] && strcasecmp ( $_SERVER ['REMOTE_ADDR'], "unknown" ))
		$ip = $_SERVER ['REMOTE_ADDR'];
	else
		$ip = "unknown";
	return ($ip);
}

function myencode($string) {
	$data = base64_encode ( $string );
	$data = str_replace ( array ('+', '/', '=' ), array ('-', '_', '' ), $data );
	return $data;
}

function mydecode($string) {
	$data = str_replace ( array ('-', '_' ), array ('+', '/' ), $string );
	$mod4 = strlen ( $data ) % 4;
	if ($mod4) {
		$data .= substr ( '====', $mod4 );
	}
	return base64_decode ( $data );
}


/**
 *清除HTML和双引号
 *@date 2010-5-19
 *@time 下午02:20:40
 */
function clearh($string) {
	//清除HTML和双引号
	$string = strip_tags ( $string ); //preg_replace("/<(\/?.*?)>/si","",$string);
	$string = str_replace ( '"', ",", $string );
	return $string;
} //end clearh


function delete_html($string) {
	if (is_array ( $string )) {
		foreach ( $string as $key => $val ) {
			$string [$key] = shtmlspecialchars ( $val );
		}
	} else {
		$string = preg_replace ( "/<(\/?(p|strong|span|o:p|a|st1).*?)>/si", "", $string );
		$string = preg_replace ( '/&amp;((#(\d{3,5}|x[a-fA-F0-9]{4})|[a-zA-Z][a-z0-9]{2,5});)/', '&\\1', str_replace ( array ('&', '"', '<', '>' ), array ('&amp;', '&quot;', '&lt;', '&gt;' ), $string ) );
	}
	return nl2br ( $string );
}

function deletehtml($str) {
	$str = trim ( $str );
	$str = strip_tags ( $str, "" );
	$str = preg_replace ( "{\t}", "", $str );
	$str = preg_replace ( "{\r\n}", "", $str );
	$str = preg_replace ( "{\r}", "", $str );
	$str = preg_replace ( "{\n}", "", $str );
	$str = preg_replace ( "{   }", " ", $str );
	$str = preg_replace ( "{  }", " ", $str );
	return $str;
}

/**
 * 返回格式化文件尺寸
 * 
 * @param Int $size 文件尺寸单位（B）
 */
function RealSize($size) {
	if ($size < 1024) {
		return $size . ' Byte';
	}
	if ($size < 1048576) {
		return round ( $size / 1024, 2 ) . ' KB';
	}
	if ($size < 1073741824) {
		return round ( $size / 1048576, 2 ) . ' MB';
	}
	if ($size < 1099511627776) {
		return round ( $size / 1073741824, 2 ) . ' GB';
	}
}

/**
 +----------------------------------------------------------
 * 把返回的数据集转换成Tree
 +----------------------------------------------------------
 * @access public
 +----------------------------------------------------------
 * @param array $list 要转换的数据集
 * @param string $pid parent标记字段
 * @param string $level level标记字段
 +----------------------------------------------------------
 * @return array
 +----------------------------------------------------------
 */
function list_to_tree($list, $pk='id',$pid = 'pid',$child = '_child',$root=0)
{
    // 创建Tree
    $tree = array();
    if(is_array($list)) {
        // 创建基于主键的数组引用
        $refer = array();
        foreach ($list as $key => $data) {
            $refer[$data[$pk]] =& $list[$key];
        }
        foreach ($list as $key => $data) {
            // 判断是否存在parent
            $parentId = $data[$pid];
            if ($root == $parentId) {
                $tree[] =& $list[$key];
            }else{
                if (isset($refer[$parentId])) {
                    $parent =& $refer[$parentId];
                    $parent[$child][] =& $list[$key];
                }
            }
        }
    }
    return $tree;
}
?>